import qs from "qs";
import * as auth from "auth-provider";
import { useAuth } from "context/auth-context";
const apiUrl = process.env.REACT_APP_API_URL;
interface Config extends RequestInit {
  data?: object;
  token?: string;
}
export const http = async (
  endpoint: string,
  { data, token, headers, ...customConfig }: Config = {}
) => {
  const config = {
    method: "GET",
    headers: {
      Authorization: token ? `Bearer ${token}` : "",
      "Content-Type": data ? "application/json" : "",
    },
    ...customConfig,
  };
  if (config.method.toUpperCase() === "GET") {
    endpoint += `?${qs.stringify(data)}`;
  } else {
    config.body = JSON.stringify(data);
  }
  return window.fetch(`${apiUrl}/${endpoint}`, config).then(async (res) => {
    //没权限
    if (res.status === 401) {
      await auth.logout();
      window.location.reload();
      return Promise.reject({ msg: "请重新登录！" });
    } else {
      const data = await res.json();
      if (res.ok) {
        return data;
      } else {
        return Promise.reject(data);
      }
    }
  });
};
export const useHttp = () => {
  const { user } = useAuth();
  return (...[endpont, config]: Parameters<typeof http>) =>
    http(endpont, { ...config, token: user?.token });
};
